package com.taoyun.service;

import com.taoyun.pojo.entity.User;
import com.taoyun.pojo.vo.UserVO;
import org.apache.ibatis.annotations.Param;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface IUserService {

 //登录
 User login(String userNumber,String password);

 //忘记密码
 boolean resetPassword(String userNumber,String email,String newPassword);

 // 修改密码
 boolean modifyPassword(String userNumber,String newPassword);

 //修改认证邮箱
 boolean updateEmail(String userNumber,String newEmail);



 User findUser(Integer id);

 // 根据email和员工号查找员工
 User searchByEmailAndUserNumber(String userNumber, String email);

 //超管单个删除用户
 Integer DeleteUser(Integer id);

 //超管批量删除用户
 Integer DeleteUserBatch(Integer[] ids);

 //通过UserId查询用户，返回User对象
 User getUserById(Integer id);

 //用于超管查询云盘所有用户
 List<User> ShowAll(Integer Id);

 //超管/管理员批量添加员工
 Integer AddStaffsBatch(List<User> users) throws IOException;

 //超管修改员工信息，能修改全部信息
 Integer SAdminModify(User user);

 //通过UserNumberList查找员工
 Integer SelectUserByUserNumberList(List<User> users);

 Integer SelectUserByUserNumber(String userNumber);

 //超管重置密码
 Integer ResetAllPassword(Integer AdminId);

 //查询该部门是否已存在一名管理员
 List<User> AdminExist(String department,String permission);

 //用于判断部门管理员添加员工的时候是否添加自己部门的员工
 Boolean SameDepartment(Integer AdminId, String userDepartment);

 //单个添加员工
 Integer AddUser(User user) throws IOException;

 //批量删除员工
 Integer DeleteStaffsBatch(String ids);

 //根据邮箱查找员工
 User SearchStaffByEmail(String email);

 //根据姓名对员工的模糊查询
 List<User> SearchStaffByName(String name,String Department);

 //超管更改管理员、员工\管理员更改员工信息（姓名、性别、部门、权限、状态）
 Integer AdminChangeStaffState(Integer admin_id, User user);

 //根据部门查询员工
 List<User> SearchStaffByDepartment(String dname);

 //个人信息管理（包括超管、管理员、员工），只能修改密码，邮箱。手机号
 Integer UpdateStaffs(UserVO userVO);

 //修改密码
 Integer StaffUpdatePwd(Integer userId, String password, String email);

 //NoNull
 Map<String,String> NoNUll(List<User> users, HttpServletResponse response);

 //批量允许用户使用云盘
 Integer AllowState(List<Integer> Ids);
 //批量禁止用户使用云盘
 Integer BanState(List<Integer> Ids);
 //降职原本的管理员未员工
 Integer Demotion(String Department);
 //提升用户为部门管理员
 Integer Promoted(Integer userId);

}
